#include <stdio.h>
#include <math.h>

/*【8大函数】*/

/*【1】读取pgm为矩阵 函数*/  //读图片的
int pgm_to_matrix(const char *file_path, const int n_rows, const int n_cols, double A[n_rows][n_cols]);

/*【2】矩阵拉成一条行向量 函数*/  //展开为输入
void matrix_to_vector(const int n_rows, const int n_cols, const double matrix[n_rows][n_cols], double vector[1][n_rows*n_cols]);

/*【3】向量变矩阵 函数*/  //txt的权重变矩阵
void vector_to_matrix(const int n_rows, const int n_cols, const double vector[1][n_rows*n_cols], double matrix[n_rows][n_cols]);

/*【4】读取txt为向量 函数*/  //读权重与偏置的
void read_txt_data(const char *txt_path, const int n, double array[1][n]);

/*【5】矩阵加法 函数*/  //矩阵相加
void add_matrices(const int n_rows, const int n_cols, const double mat1[n_rows][n_cols], const double mat2[n_rows][n_cols], double result[n_rows][n_cols]);

/*【6】矩阵乘法 函数*/  //矩阵乘法
void matrix_mul(const int n_rows, const int n_cols, const int p, const double matrix1[n_rows][p], const double matrix2[p][n_cols], double matrix_product[n_rows][n_cols]);

/*【7】激活 函数*/  //激活函数
void active_function(const int SIZE, const double F[1][SIZE], double G[1][SIZE]);

/*【8】softmax 函数*/  //原始输出转为概率分布(置信度)
void soft_max(const int n_rows, const int n_cols, const double L[n_rows][n_cols], double S[n_rows][n_cols]);

int main(){

start:
    char filenames[10][256] = {0};  //存最多10个文件名，名称长度不超过256（包含'\0'）
    char file_path[10][512] = {0};  //储存pgm文件地址，储存数需与上面保持一致
    int file_count = 0;  //统计输入文件的数量

    printf("please input filenames:");  //请求输入文件名

    /*从输入中获取文件名称，我这里限制了最多十个，超出部分会被忽略*/
    int ifpass = 1;
    while(file_count < 10){
    scanf("%255[^,\n]", filenames[file_count]);  //读取文件名称，scanf自动补'\0'
    sprintf(file_path[file_count], "%s%s", "images/", filenames[file_count]);
    file_count++;  //计数加一
    if(getchar() != '\n'){}
    else{ifpass = 0; break;}  //读走逗号和换行符，并及时停止
    }

    /*清空缓存区*/
    int c;
    if(ifpass == 1){
        while((c = getchar()) != '\n' && c != EOF){}
    }

    /*神经网络核心*/
    for(int i = 0; i < file_count; i++){

    }

    /*是否继续*/
    char choice;
    printf("do you want to continue? please input [Y or N]:");
    scanf("%c",&choice);
    if(choice == 'Y'){while(getchar() != '\n'){}; goto start;}
    printf("Bye\n");
    return 0;
}

/*【1】读取pgm为矩阵 函数*/
int pgm_to_matrix(const char *file_path, const int n_rows, const int n_cols, double A[n_rows][n_cols]){
    
}

/*【2】矩阵拉成一条行向量 函数*/
void matrix_to_vector(const int n_rows, const int n_cols, const double matrix[n_rows][n_cols], double vector[1][n_rows*n_cols]){

}

/*【3】向量变矩阵 函数*/
void vector_to_matrix(const int n_rows, const int n_cols, const double vector[1][n_rows*n_cols], double matrix[n_rows][n_cols]){

}

/*【4】读取txt为向量 函数*/  //读权重与偏置的
void read_txt_data(const char *txt_path, const int n, double array[1][n]){

}

/*【5】矩阵加法 函数*/  //矩阵相加
void add_matrices(const int n_rows, const int n_cols, const double mat1[n_rows][n_cols], const double mat2[n_rows][n_cols], double result[n_rows][n_cols]){

}

/*【6】矩阵乘法 函数*/
void matrix_mul(const int n_rows, const int n_cols, const int p, const double matrix1[n_rows][p], const double matrix2[p][n_cols], double matrix_product[n_rows][n_cols]){

}

/*【7】激活 函数*/  //这是非常经典的ReLU激活函数
void active_function(const int SIZE, const double F[1][SIZE], double G[1][SIZE]){

}

/*【8】softmax 函数*/  //原始输出转为概率分布(置信度)
void soft_max(const int n_rows, const int n_cols, const double L[n_rows][n_cols], double S[n_rows][n_cols]){

}